package nancal.mp.web.system

import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import nancal.mp.db.mongo.entity.sys.*
import nancal.mp.db.mongo.mor
import nbcp.base.annotation.*
import nbcp.base.annotation.mvc.*
import nbcp.base.comm.ApiResult
import nbcp.base.comm.JsonResult
import nbcp.base.comm.ListResult
import nbcp.base.comm.PagerModel
import nbcp.base.extend.*
import nbcp.base.json.*
import nbcp.mvc.sys.*
import nbcp.myoql.db.mongo.deleteById
import nbcp.myoql.db.mongo.query
import nbcp.myoql.db.mongo.queryById
import nbcp.myoql.db.mongo.updateWithEntity

import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import javax.servlet.http.HttpServletRequest

/**
 * Created by CodeGenerator!
 */
@Api(description = "子系统", tags = arrayOf("SubSystemInfo"))
@RestController
@RequestMapping("/system/sub-system-info")
class SubSystemInfoAutoController {

    @ApiOperation("列表")
    @PostMapping("/list")
    fun list(
        id: String, //当列表列新一条后，刷新时使用
        name: String,
        @org.springframework.web.bind.annotation.RequestBody query: PagerModel<Any?>,
        request: HttpServletRequest
    ): ListResult<SubSystemInfo> {

        mor.sys.subSystemInfo.query()
            .apply{
                if(id.HasValue){
                    this.where{it.id mongoEquals id}
                }
                if(name.HasValue){
                    this.where{ it.name mongoLike name }
                }
            }
            .withPager(query)
            .toListResult()
            .apply{
                return this;
            }
    }

    @ApiOperation("详情")
    @PostMapping("/detail/{id}")
    fun detail(
        @Require id: String,
        request: HttpServletRequest
    ): ApiResult<SubSystemInfo> {
        mor.sys.subSystemInfo.queryById(id)
            .toEntity()
            .apply{
                if( this == null){
                    return ApiResult.error<SubSystemInfo>("找不到数据")
                }

                return ApiResult.of(this)
            }
    }

    @ApiOperation("更新")
    @PostMapping("/save")
    fun save(
      @org.springframework.web.bind.annotation.RequestBody entity:SubSystemInfo,
      request: HttpServletRequest
    ): ApiResult<String> {

    //鉴权
    var userId = request.UserId;


    mor.sys.subSystemInfo.updateWithEntity(entity)
        
        .run {
            if (entity.id.HasValue){
                return@run  this.execUpdate()
            }
            else{
                return@run  this.execInsert();
            }
        }
        .apply{
            if(this == 0){
              return ApiResult.error("更新失败")
            }

            return ApiResult.of(entity.id)
        }
    }

    @ApiOperation("删除")
    @PostMapping("/delete/{id}")
    fun delete(
      @Require id:String,
      request: HttpServletRequest
    ): JsonResult {
    //鉴权
    var userId = request.UserId;

    var entity = mor.sys.subSystemInfo.queryById(id).toEntity();
    if(entity == null){
        return JsonResult.error("找不到数据")
    }

    mor.sys.subSystemInfo.deleteById(id)
        .exec()
        .apply{
            if(this == 0){
                return JsonResult.error("删除失败")
            }
            //实体上配置垃圾箱功能，可物理删除，会自动移到垃圾箱。
            return JsonResult()
        }
    }
}
